home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / IEditor / Generators / E / code_handlers.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-17  |  16.5 KB  |  588 lines

  1. /// Includes
  2. #define INTUI_V36_NAMES_ONLY
  3.  
  4. #include <exec/types.h>                 // exec
  5. #include <exec/lists.h>
  6. #include <exec/memory.h>
  7. #include <exec/nodes.h>
  8. #include <dos/dos.h>                    // dos
  9. #include <dos/dostags.h>
  10. #include <intuition/intuition.h>        // intuition
  11. #include <libraries/gadtools.h>         // libraries
  12. #include <clib/exec_protos.h>           // protos
  13. #include <clib/dos_protos.h>
  14. #include <pragmas/exec_pragmas.h>       // pragmas
  15. #include <pragmas/dos_pragmas.h>
  16.  
  17. #include <string.h>
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <ctype.h>
  21.  
  22. #include "DEV_IE:Generators/defs.h"
  23. #include "DEV_IE:Include/IEditor.h"
  24. #include "DEV_IE:Generators/C/Protos.h"
  25. ///
  26. /// Data
  27. static UBYTE VanillaTmp[] = "\nBOOL %sVanillaKey( void )\n"
  28.                 "{\n"
  29.                 "\t/*  Routine for IDCMP_VANILLAKEY  */\n"
  30.                 "\treturn( TRUE );\n"
  31.                 "}\n";
  32.  
  33. ULONG IDCMPVer[] = { IDCMP_MENUVERIFY, IDCMP_REQVERIFY, IDCMP_SIZEVERIFY };
  34.  
  35. UBYTE *IDCMPVerStr[] = {
  36.     "\n\t\tif( class == IDCMP_MENUVERIFY )\n\t\t\trunning = %sMenuVerify();\n",
  37.     "\n\t\tif( class == IDCMP_REQVERIFY )\n\t\t\trunning = %sReqVerify();\n",
  38.     "\n\t\tif( class == IDCMP_SIZEVERIFY )\n\t\t\trunning = %sSizeVerify();\n"
  39. };
  40.  
  41. UBYTE *IDCMPVerProto[] = {
  42.     "extern BOOL %sMenuVerify( void );\n",
  43.     "extern BOOL %sReqVerify( void );\n",
  44.     "extern BOOL %sSizeVerify( void );\n"
  45. };
  46.  
  47. UBYTE *IDCMPVerTmp[] = {
  48.     "\nBOOL %sMenuVerify( void )\n"
  49.     "{\n"
  50.     "\t/*  Routine for IDCMP_MENUVERIFY  */\n"
  51.     "\treturn( TRUE );\n"
  52.     "}\n", // ---
  53.     "\nBOOL %sReqVerify( void )\n"
  54.     "{\n"
  55.     "\t/*  Routine for IDCMP_REQVERIFY  */\n"
  56.     "\treturn( TRUE );\n"
  57.     "}\n", // ---
  58.     "\nBOOL %sSizeVerify( void )\n"
  59.     "{\n"
  60.     "\t/*  Routine for IDCMP_SIZEVERIFY  */\n"
  61.     "\treturn( TRUE );\n"
  62.     "}\n",
  63. };
  64.  
  65. UBYTE CaseRefresh[] = "\n\t\t\tcase\tIDCMP_REFRESHWINDOW:\n"
  66.                  "\t\t\t\tGT_BeginRefresh( %sWnd );\n"
  67.                  "\t\t\t\tGT_EndRefresh( %sWnd, TRUE );\n"
  68.                  "\t\t\t\tbreak;\n";
  69.  
  70. UBYTE CaseRefresh2[] = "\n\t\t\tcase\tIDCMP_REFRESHWINDOW:\n"
  71.                   "\t\t\t\tGT_BeginRefresh( %sWnd );\n"
  72.                   "\t\t\t\t%sRender();\n"
  73.                   "\t\t\t\tGT_EndRefresh( %sWnd, TRUE );\n"
  74.                   "\t\t\t\tbreak;\n";
  75.  
  76. UBYTE *IDCMPStr[] = {
  77.     NULL,
  78.     "\n\t\t\tcase\tIDCMP_NEWSIZE:\n"
  79.     "\t\t\t\trunning = %sNewSize();\n"
  80.     "\t\t\t\tbreak;\n",
  81.  
  82.     CaseRefresh,
  83.  
  84.     "\n\t\t\tcase\tIDCMP_MOUSEBUTTONS:\n"
  85.     "\t\t\t\trunning = %sMouseButtons();\n"
  86.     "\t\t\t\tbreak;\n",
  87.  
  88.     "\n\t\t\tcase\tIDCMP_MOUSEMOVE:\n"
  89.     "\t\t\t\trunning = %sMouseMove();\n"
  90.     "\t\t\t\tbreak;\n",
  91.  
  92.     "\n\t\t\tcase\tIDCMP_GADGETDOWN:\n"
  93.     "\t\t\t\tfunc = (( struct Gadget * )%sMsg.IAddress )->UserData;\n"
  94.     "\t\t\t\trunning = (*func)();\n"
  95.     "\t\t\t\tbreak;\n",
  96.  
  97.     "\n\t\t\tcase\tIDCMP_GADGETUP:\n"
  98.     "\t\t\t\tfunc = (( struct Gadget * )%sMsg.IAddress )->UserData;\n"
  99.     "\t\t\t\trunning = (*func)();\n"
  100.     "\t\t\t\tbreak;\n",
  101.  
  102.     "\n\t\t\tcase\tIDCMP_REQSET:\n"
  103.     "\t\t\t\trunning = %sReqSet();\n"
  104.     "\t\t\t\tbreak;\n",
  105.  
  106.     "\n\t\t\tcase\tIDCMP_MENUPICK:\n"
  107.     "\t\t\t\twhile( %sMsg.Code != MENUNULL ) {\n"
  108.     "\t\t\t\t\tn = ItemAddress( %sMenus, %sMsg.Code );\n"
  109.     "\t\t\t\t\tfunc = (GTMENUITEM_USERDATA( n ));\n"
  110.     "\t\t\t\t\trunning = (*func)();\n"
  111.     "\t\t\t\t\t%sMsg.Code = n->NextSelect;\n"
  112.     "\t\t\t\t}\n"
  113.     "\t\t\t\tbreak;\n",
  114.  
  115.     "\n\t\t\tcase\tIDCMP_CLOSEWINDOW:\n"
  116.     "\t\t\t\trunning = %sCloseWindow();\n"
  117.     "\t\t\t\tbreak;\n",
  118.  
  119.     "\n\t\t\tcase\tIDCMP_RAWKEY:\n"
  120.     "\t\t\t\trunning = %sRawKey();\n"
  121.     "\t\t\t\tbreak;\n",
  122.  
  123.     NULL,
  124.  
  125.     "\n\t\t\tcase\tIDCMP_REQCLEAR:\n"
  126.     "\t\t\t\trunning = %sReqClear();\n"
  127.     "\t\t\t\tbreak;\n",
  128.  
  129.     NULL,
  130.  
  131.     "\n\t\t\tcase\tIDCMP_NEWPREFS:\n"
  132.     "\t\t\t\trunning = %sNewPrefs();\n"
  133.     "\t\t\t\tbreak;\n",
  134.  
  135.     "\n\t\t\tcase\tIDCMP_DISKINSERTED:\n"
  136.     "\t\t\t\trunning = %sDiskInserted();\n"
  137.     "\t\t\t\tbreak;\n",
  138.  
  139.     "\n\t\t\tcase\tIDCMP_DISKREMOVED:\n"
  140.     "\t\t\t\trunning = %sDiskRemoved();\n"
  141.     "\t\t\t\tbreak;\n",
  142.  
  143.     "\n\t\t\tcase\tIDCMP_WBENCHMESSAGE:\n"
  144.     "\t\t\t\trunning = %sWBenchMessage();\n"
  145.     "\t\t\t\tbreak;\n",
  146.  
  147.     "\n\t\t\tcase\tIDCMP_ACTIVEWINDOW:\n"
  148.     "\t\t\t\trunning = %sActiveWindow();\n"
  149.     "\t\t\t\tbreak;\n",
  150.  
  151.     "\n\t\t\tcase\tIDCMP_INACTIVEWINDOW:\n"
  152.     "\t\t\t\trunning = %sInactiveWindow();\n"
  153.     "\t\t\t\tbreak;\n",
  154.  
  155.     "\n\t\t\tcase\tIDCMP_DELTAMOVE:\n"
  156.     "\t\t\t\trunning = %sDeltaMove();\n"
  157.     "\t\t\t\tbreak;\n",
  158.  
  159.     "\n\t\t\tcase\tIDCMP_VANILLAKEY:\n"
  160.     "\t\t\t\trunning = %sVanillaKey();\n"
  161.     "\t\t\t\tbreak;\n",
  162.  
  163.     "\n\t\t\tcase\tIDCMP_INTUITICKS:\n"
  164.     "\t\t\t\trunning = %sIntuiTicks();\n"
  165.     "\t\t\t\tbreak;\n",
  166.  
  167.     "\n\t\t\tcase\tIDCMP_IDCMPUPDATE:\n"
  168.     "\t\t\t\trunning = %sIDCMPUpdate();\n"
  169.     "\t\t\t\tbreak;\n",
  170.  
  171.     "\n\t\t\tcase\tIDCMP_MENUHELP:\n"
  172.     "\t\t\t\trunning = %sMenuHelp();\n"
  173.     "\t\t\t\tbreak;\n",
  174.  
  175.     "\n\t\t\tcase\tIDCMP_CHANGEWINDOW:\n"
  176.     "\t\t\t\trunning = %sChangeWindow();\n"
  177.     "\t\t\t\tbreak;\n",
  178.  
  179.     "\n\t\t\tcase\tIDCMP_GADGETHELP:\n"
  180.     "\t\t\t\trunning = %sGadgetHelp();\n"
  181.     "\t\t\t\tbreak;\n"
  182. };
  183.  
  184. UBYTE *IDCMPProto[] = {
  185.     NULL,
  186.     "extern BOOL %sNewSize( void );\n",
  187.     NULL,
  188.     "extern BOOL %sMouseButtons( void );\n",
  189.     "extern BOOL %sMouseMove( void );\n",
  190.     NULL,
  191.     NULL,
  192.     "extern BOOL %sReqSet( void );\n",
  193.     NULL,
  194.     "extern BOOL %sCloseWindow( void );\n",
  195.     "extern BOOL %sRawKey( void );\n",
  196.     NULL,
  197.     "extern BOOL %sReqClear( void );\n",
  198.     NULL,
  199.     "extern BOOL %sNewPrefs( void );\n",
  200.     "extern BOOL %sDiskInserted( void );\n",
  201.     "extern BOOL %sDiskRemoved( void );\n",
  202.     "extern BOOL %sWBenchMessage( void );\n",
  203.     "extern BOOL %sActiveWindow( void );\n",
  204.     "extern BOOL %sInactiveWindow( void );\n",
  205.     "extern BOOL %sDeltaMove( void );\n",
  206.     "extern BOOL %sVanillaKey( void );\n",
  207.     "extern BOOL %sIntuiTicks( void );\n",
  208.     "extern BOOL %sIDCMPUpdate( void );\n",
  209.     "extern BOOL %sMenuHelp( void );\n",
  210.     "extern BOOL %sChangeWindow( void );\n",
  211.     "extern BOOL %sGadgetHelp( void );\n"
  212. };
  213.  
  214. UBYTE *IDCMPTmp[] = {
  215.     NULL,
  216.     "\nBOOL %sNewSize( void )\n"
  217.     "{\n"
  218.     "\t/*  Routine for IDCMP_NEWSIZE  */\n"
  219.     "\treturn( TRUE );\n"
  220.     "}\n",
  221.     NULL,
  222.     "\nBOOL %sMouseButtons( void )\n"
  223.     "{\n"
  224.     "\t/*  Routine for IDCMP_MOUSEBUTTONS  */\n"
  225.     "\treturn( TRUE );\n"
  226.     "}\n",
  227.  
  228.     "\nBOOL %sMouseMove( void )\n"
  229.     "{\n"
  230.     "\t/*  Routine for IDCMP_MOUSEMOVE  */\n"
  231.     "\treturn( TRUE );\n"
  232.     "}\n",
  233.  
  234.     NULL,
  235.     NULL,
  236.     "\nBOOL %sReqSet( void )\n"
  237.     "{\n"
  238.     "\t/*  Routine for IDCMP_REQSET  */\n"
  239.     "\treturn( TRUE );\n"
  240.     "}\n",
  241.     NULL,
  242.     "\nBOOL %sCloseWindow( void )\n"
  243.     "{\n"
  244.     "\t/*  Routine for IDCMP_CLOSEWINDOW  */\n"
  245.     "\t/*  Return FALSE to quit, I suppose... ;)  */\n"
  246.     "\treturn( FALSE );\n"
  247.     "}\n",
  248.  
  249.     "\nBOOL %sRawKey( void )\n"
  250.     "{\n"
  251.     "\t/*  Routine for IDCMP_RAWKEY  */\n"
  252.     "\treturn( TRUE );\n"
  253.     "}\n",
  254.  
  255.     NULL,
  256.     "\nBOOL %sReqClear( void )\n"
  257.     "{\n"
  258.     "\t/*  Routine for IDCMP_REQCLEAR  */\n"
  259.     "\treturn( TRUE );\n"
  260.     "}\n",
  261.     NULL,
  262.     "\nBOOL %sNewPrefs( void )\n"
  263.     "{\n"
  264.     "\t/*  Routine for IDCMP_NEWPREFS  */\n"
  265.     "\treturn( TRUE );\n"
  266.     "}\n",
  267.  
  268.     "\nBOOL %sDiskInserted( void )\n"
  269.     "{\n"
  270.     "\t/*  Routine for IDCMP_DISKINSERTED  */\n"
  271.     "\treturn( TRUE );\n"
  272.     "}\n",
  273.  
  274.     "\nBOOL %sDiskRemoved( void )\n"
  275.     "{\n"
  276.     "\t/*  Routine for IDCMP_DISKREMOVED  */\n"
  277.     "\treturn( TRUE );\n"
  278.     "}\n",
  279.  
  280.     "\nBOOL %sWBenchMessage( void )\n"
  281.     "{\n"
  282.     "\t/*  Routine for IDCMP_WBENCHMESSAGE  */\n"
  283.     "\treturn( TRUE );\n"
  284.     "}\n",
  285.  
  286.     "\nBOOL %sActiveWindow( void )\n"
  287.     "{\n"
  288.     "\t/*  Routine for IDCMP_ACTIVEWINDOW  */\n"
  289.     "\treturn( TRUE );\n"
  290.     "}\n",
  291.  
  292.     "\nBOOL %sInactiveWindow( void )\n"
  293.     "{\n"
  294.     "\t/*  Routine for IDCMP_INACTIVEWINDOW  */\n"
  295.     "\treturn( TRUE );\n"
  296.     "}\n",
  297.  
  298.     "\nBOOL %sDeltaMove( void )\n"
  299.     "{\n"
  300.     "\t/*  Routine for IDCMP_DELTAMOVE  */\n"
  301.     "\treturn( TRUE );\n"
  302.     "}\n",
  303.  
  304.     "\nBOOL %sVanillaKey( void )\n"
  305.     "{\n"
  306.     "\t/*  Routine for IDCMP_VANILLAKEY  */\n"
  307.     "\treturn( TRUE );\n"
  308.     "}\n",
  309.  
  310.     "\nBOOL %sIntuiTicks( void )\n"
  311.     "{\n"
  312.     "\t/*  Routine for IDCMP_INTUITICKS  */\n"
  313.     "\treturn( TRUE );\n"
  314.     "}\n",
  315.  
  316.     "\nBOOL %sIDCMPUpdate( void )\n"
  317.     "{\n"
  318.     "\t/*  Routine for IDCMP_IDCMPUPDATE  */\n"
  319.     "\treturn( TRUE );\n"
  320.     "}\n",
  321.  
  322.     "\nBOOL %sMenuHelp( void )\n"
  323.     "{\n"
  324.     "\t/*  Routine for IDCMP_MENUHELP  */\n"
  325.     "\treturn( TRUE );\n"
  326.     "}\n",
  327.  
  328.     "\nBOOL %sChangeWindow( void )\n"
  329.     "{\n"
  330.     "\t/*  Routine for IDCMP_CHANGEWINDOW  */\n"
  331.     "\treturn( TRUE );\n"
  332.     "}\n",
  333.  
  334.     "\nBOOL %sGadgetHelp( void )\n"
  335.     "{\n"
  336.     "\t/*  Routine for IDCMP_GADGETHELP  */\n"
  337.     "\treturn( TRUE );\n"
  338.     "}\n"
  339. };
  340. ///
  341.  
  342.  
  343.  
  344. /// WriteIDCMPHandler
  345. void WriteIDCMPHandler( struct GenFiles *Files, struct IE_Data *IE )
  346. {
  347.     struct WindowInfo  *wnd;
  348.     UWORD               c;
  349.     ULONG               idcmp;
  350.  
  351.  
  352.     for( wnd = IE->win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  353.     if( wnd->wi_IDCMP ) {
  354.  
  355.         FPrintf( Files->XDef, "extern LONG Handle%sIDCMP( void );\n", wnd->wi_Label );
  356.  
  357.         FPrintf( Files->Std, "\nLONG Handle%sIDCMP( void )\n"
  358.                  "{\n",
  359.              wnd->wi_Label );
  360.  
  361.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  362.         FPuts( Files->Std, "\tstruct IntuiMessage\t*m;\n" );
  363.  
  364.         if( wnd->wi_IDCMP & IDCMP_MENUPICK )
  365.         FPuts( Files->Std, "\tstruct MenuItem\t\t*n;\n" );
  366.  
  367.         FPuts( Files->Std, "\tBOOL\t\t\t(*func)(void);\n"
  368.                    "\tBOOL\t\t\trunning = TRUE;\n"
  369.                    "\tint\t\t\tclass;\n"
  370.                    "\n" );
  371.  
  372.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  373.         FPrintf( Files->Std, "\twhile( m = GT_GetIMsg( %sWnd->UserPort )) {\n\n"
  374.                      "\t\tCopyMem((char *)m, (char *)&%sMsg, (long)sizeof( struct IntuiMessage ));\n\n",
  375.              wnd->wi_Label, wnd->wi_Label );
  376.         else
  377.         FPrintf( Files->Std, "#define\t%sMsg IDCMPMsg\n\n", wnd->wi_Label );
  378.  
  379.         FPrintf( Files->Std, "\t\tclass = %sMsg.Class;\n", wnd->wi_Label );
  380.  
  381.         IE->win_info = wnd;
  382.         idcmp = ( *IE->IEXSrcFun->IDCMP )( wnd->wi_IDCMP );
  383.  
  384.         for( c = 0; c < 3; c++ ) {
  385.         if( idcmp & IDCMPVer[ c ]) {
  386.             FPrintf( Files->XDef, IDCMPVerProto[ c ], wnd->wi_Label );
  387.             FPrintf( Files->Std, IDCMPVerStr[ c ], wnd->wi_Label );
  388.             if( IE->C_Prefs & GEN_TEMPLATE )
  389.             FPrintf( Files->Temp, IDCMPVerTmp[ c ], wnd->wi_Label );
  390.         }
  391.         }
  392.  
  393.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  394.         FPuts( Files->Std, "\n\t\tGT_ReplyIMsg( m );\n\n" );
  395.  
  396.         FPuts( Files->Std, "\t\tswitch( class ) {\n" );
  397.  
  398.         if(( idcmp & IDCMP_GADGETUP ) && ( idcmp & IDCMP_GADGETDOWN )) {
  399.         idcmp &= ~( IDCMP_GADGETUP | IDCMP_GADGETDOWN );
  400.         FPrintf( Files->Std, "\n\t\t\tcase\tIDCMP_GADGETUP:\n"
  401.                      "\t\t\tcase\tIDCMP_GADGETDOWN:\n"
  402.                      "\t\t\t\tfunc = (( struct Gadget * )%sMsg.IAddress )->UserData;\n"
  403.                      "\t\t\t\trunning = (*func)();\n"
  404.                      "\t\t\t\tbreak;\n",
  405.              wnd->wi_Label );
  406.         }
  407.  
  408.         if(( IE->C_Prefs & KEY_HANDLER ) && ( wnd->wi_NumKeys )) {
  409.  
  410.         FPrintf( Files->Std, "\n\t\t\tcase\tIDCMP_VANILLAKEY:\n"
  411.                      "\t\t\t\trunning = Handle%sKeys();\n"
  412.                      "\t\t\t\tbreak;\n",
  413.              wnd->wi_Label );
  414.  
  415.         if( idcmp & IDCMP_VANILLAKEY ) {
  416.             idcmp &= ~IDCMP_VANILLAKEY;
  417.             FPrintf( Files->XDef, "extern BOOL %sVanillaKey( void );\n", wnd->wi_Label );
  418.             if( IE->C_Prefs & GEN_TEMPLATE )
  419.             FPrintf( Files->Temp, VanillaTmp, wnd->wi_Label );
  420.         }
  421.         }
  422.  
  423.         IDCMPStr[2] = wnd->wi_NeedRender ? &CaseRefresh2[0] : &CaseRefresh[0];
  424.  
  425.         for( c = 0; c < IDCMPS_NUM; c++ ) {
  426.         if( idcmp & idcmps[ c ]) {
  427.             if( IDCMPStr[ c ]) {
  428.  
  429.             FPrintf( Files->Std, IDCMPStr[ c ],
  430.                  wnd->wi_Label, wnd->wi_Label,
  431.                  wnd->wi_Label, wnd->wi_Label );
  432.  
  433.             if( IDCMPProto[ c ])
  434.                 FPrintf( Files->XDef, IDCMPProto[ c ], wnd->wi_Label );
  435.  
  436.             if(( IE->C_Prefs & GEN_TEMPLATE ) && ( IDCMPTmp[ c ]))
  437.                 FPrintf( Files->Temp, IDCMPTmp[ c ], wnd->wi_Label );
  438.             }
  439.         }
  440.         }
  441.  
  442.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  443.         FPuts( Files->Std, "\n\t\t}" );
  444.  
  445.         FPuts( Files->Std, "\n\t}\n\treturn( running );\n}\n" );
  446.     }
  447.     }
  448. }
  449. ///
  450. /// WriteKeyHandler
  451. void WriteKeyHandler( struct GenFiles *Files, struct IE_Data *IE )
  452. {
  453.     struct WindowInfo  *wnd;
  454.     struct GadgetInfo  *gad;
  455.     UBYTE               ch;
  456.  
  457.     for( wnd = IE->win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  458.     if( wnd->wi_NumKeys ) {
  459.  
  460.         FPrintf( Files->XDef, "extern BOOL Handle%sKeys( void );\n", wnd->wi_Label );
  461.  
  462.         FPrintf( Files->Std, "\nBOOL Handle%sKeys( void )\n"
  463.                  "{\n"
  464.                  "\tBOOL running = TRUE;\n\n",
  465.              wnd->wi_Label );
  466.  
  467.         if(!(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS ))) {
  468.         if( IE->C_Prefs & TO_LOWER )
  469.             FPrintf( Files->Std, "\tswitch( tolower( %sMsg.Code )) {\n", wnd->wi_Label );
  470.         else
  471.             FPrintf( Files->Std, "\tswitch( %sMsg.Code ) {\n", wnd->wi_Label );
  472.         } else {
  473.         FPuts( Files->Std, "\tUBYTE ch = " );
  474.         if( IE->C_Prefs & TO_LOWER )
  475.             FPrintf( Files->Std, "tolower( %sMsg.Code );\n", wnd->wi_Label );
  476.         else
  477.             FPrintf( Files->Std, "%sMsg.Code;\n", wnd->wi_Label );
  478.         }
  479.  
  480.         for( gad = wnd->wi_Gadgets.mlh_Head; gad->g_Node.ln_Succ; gad = gad->g_Node.ln_Succ ) {
  481.         if( gad->g_flags2 & G_KEYPRESSED ) {
  482.  
  483.  
  484.             if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS )) {
  485.             if( IE->C_Prefs & TO_LOWER )
  486.                 FPrintf( Files->Std, "\n\tif( ch == tolower( GetActivationKey( %sNGad[ GD_%s ].ng_GadgetText ))) {\n",
  487.                      wnd->wi_Label, gad->g_Label );
  488.             else
  489.                 FPrintf( Files->Std, "\n\tif( ch == GetActivationKey( %sNGad[ GD_%s ].ng_GadgetText )) {\n",
  490.                      wnd->wi_Label, gad->g_Label );
  491.             } else {
  492.             ch = ( IE->C_Prefs & TO_LOWER ) ? tolower( gad->g_Key ) : gad->g_Key;
  493.             FPrintf( Files->Std, "\n\t\tcase\t'%lc':\n", ch );
  494.             }
  495.  
  496.  
  497.             if(( gad->g_Kind == STRING_KIND ) || ( gad->g_Kind == INTEGER_KIND )) {
  498.             FPrintf( Files->Std, "\t\t\tif(!( %sGadgets[ GD_%s ]->Flags & GFLG_DISABLED ))\n"
  499.                          "\t\t\t\tActivateGadget( %sGadgets[ GD_%s ], %sWnd, NULL );\n",
  500.                  wnd->wi_Label, gad->g_Label, wnd->wi_Label, gad->g_Label, wnd->wi_Label );
  501.             } else {
  502.  
  503.             if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS ))
  504.                 FPrintf( Files->Std, "\t\treturn( %sKeyPressed() );\n",
  505.                      gad->g_Label );
  506.             else
  507.                 FPrintf( Files->Std, "\t\t\trunning = %sKeyPressed();\n",
  508.                      gad->g_Label );
  509.  
  510.             FPrintf( Files->XDef, "extern BOOL %sKeyPressed( void );\n", gad->g_Label );
  511.  
  512.             if( IE->C_Prefs & GEN_TEMPLATE )
  513.                 if(!( IE->C_Prefs & ONLY_NEW_TMP ) || (!( gad->g_flags2 & G_NO_TEMPLATE )))
  514.                 FPrintf( Files->Temp, "\nBOOL %sKeyPressed( void )\n"
  515.                               "{\n"
  516.                               "\t/*  Routine when \"%s\"'s activation key is pressed  */\n"
  517.                               "\n"
  518.                               "\t/*  ...or return TRUE not to call the gadget function  */\n"
  519.                               "\treturn %sClicked();\n"
  520.                               "}\n",
  521.                      gad->g_Label, gad->g_Titolo, gad->g_Label );
  522.             }
  523.  
  524.             if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS ))
  525.             FPuts( Files->Std, "\t}\n" );
  526.             else
  527.             FPuts( Files->Std, "\t\tbreak;\n" );
  528.         }
  529.         }
  530.  
  531.         if( wnd->wi_IDCMP & IDCMP_VANILLAKEY )
  532.         if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS ))
  533.             FPrintf( Files->Std, "\n\trunning = %sVanillaKey();\n",
  534.                  wnd->wi_Label );
  535.         else
  536.             FPrintf( Files->Std, "\n\t\tdefault:\n"
  537.                      "\t\t\trunning = %sVanillaKey();\n"
  538.                      "\t\t\tbreak;\n",
  539.                  wnd->wi_Label );
  540.  
  541.         if(!(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS )))
  542.         FPuts( Files->Std, "\n\t}" ); /* end Select */
  543.  
  544.         FPuts( Files->Std, "\n\treturn( running );\n}\n" );
  545.     }
  546.     }
  547. }
  548. ///
  549. /// WriteClickedPtrs
  550. void WriteClickedPtrs( struct GenFiles *Files, struct IE_Data *IE )
  551. {
  552.     struct WindowInfo  *wnd;
  553.  
  554.     for( wnd = IE->win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  555.     struct GadgetBank  *bank;
  556.  
  557.     WriteClicked( Files, IE, &wnd->wi_Gadgets );
  558.  
  559.     for( bank = wnd->wi_GBanks.mlh_Head; bank->Node.ln_Succ; bank = bank->Node.ln_Succ )
  560.         WriteClicked( Files, IE, &bank->Storage );
  561.     }
  562. }
  563. ///
  564. /// WriteClicked
  565. void WriteClicked( struct GenFiles *Files, struct IE_Data *IE, struct MinList *Gadgets )
  566. {
  567.     struct GadgetInfo  *gad;
  568.  
  569.     for( gad = Gadgets->mlh_Head; gad->g_Node.ln_Succ; gad = gad->g_Node.ln_Succ ) {
  570.     if( gad->g_flags2 & G_CLICKED ) {
  571.  
  572.         FPrintf( Files->XDef, "extern BOOL %sClicked( void );\n", gad->g_Label );
  573.  
  574.         if( IE->C_Prefs & GEN_TEMPLATE ) {
  575.         if((!( IE->C_Prefs & ONLY_NEW_TMP )) || (!( gad->g_flags2 & G_NO_TEMPLATE )))
  576.             FPrintf( Files->Temp, "\nBOOL %sClicked( void )\n"
  577.                       "{\n"
  578.                       "\t/*  Routine when \"%s\" is clicked  */\n"
  579.                       "\treturn( TRUE );\n"
  580.                       "}\n",
  581.                  gad->g_Label, gad->g_Titolo );
  582.         }
  583.     }
  584.     }
  585. }
  586. ///
  587.  
  588.